home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Shareware World / Comms & Internet / HTML and CSS modes / Completions / CSSCompletions.tcl next >
Text File  |  1998-05-16  |  3KB  |  110 lines

  1. ## -*-Tcl-*-
  2.  # ###################################################################
  3.  #  CSS mode - tools for editing CSS documents
  4.  # 
  5.  #  FILE: "CSSCompletions.tcl"
  6.  #                                    created: 98-02-14 13.34.27 
  7.  #                                last update: 98-04-05 15.17.29 
  8.  #  Author: Johan Linde
  9.  #  E-mail: <jl@theophys.kth.se>
  10.  #     www: <http://bach.theophys.kth.se/~jl/Alpha.html>
  11.  #  
  12.  # Version: 1.1
  13.  # 
  14.  # Copyright 1997, 1998 by Johan Linde
  15.  #  
  16.  # This software may be used freely, and distributed freely, as long as the 
  17.  # receiver is not obligated in any way by receiving it.
  18.  #  
  19.  # If you make improvements to this file, please share them!
  20.  # 
  21.  # ###################################################################
  22.  ##
  23.  
  24. set completions(CSS) {word}
  25.  
  26. # Word completion
  27. proc CSS::Completion::word {dummy} {
  28.     global cssLengths cssPercentage cssColors cssURLs cssAny cssGroup cssProperty
  29.     global HTMLmodeVars
  30.     
  31.     set allCss [lunique [concat $cssLengths $cssPercentage $cssColors $cssURLs $cssAny \
  32.     [array names cssGroup] [array names cssProperty] border-left border-top border-bottom border-right]]
  33.     foreach p {size text Display} {
  34.         set allCss [lreplace $allCss [set w [lsearch $allCss $p]] $w]
  35.     }
  36.     set matches ""
  37.     # Between {}?
  38.     set thepos [getPos]
  39.     if {$thepos == [maxPos]} {set thepos [expr [maxPos] - 1]}
  40.     if {[catch {matchIt "\}" $thepos} bpos]} {
  41.         set allHtmlWords [cssGetHtmlWords]
  42.         set pos [getPos]
  43.         backwardWord
  44.         set word [string toupper [getText [getPos] $pos]]
  45.         foreach p $allHtmlWords {
  46.             if {[string match $word* $p]} {lappend matches $p}
  47.         }
  48.         if {![llength $matches]} {
  49.             select [getPos] $pos
  50.         } else {
  51.             replaceText [getPos] $pos [largestPrefix $matches]
  52.         }
  53.         return 1
  54.     }
  55.     # Get current word
  56.     if {[catch {search -s -f 0 -m 0 -r 1 {[\{;: \t\r]} [expr [getPos] - 1]} wpos]} {set wpos "0 0"}
  57.     set wpos [lindex $wpos 1]
  58.     set word [getText $wpos [getPos]]
  59.     # Before or after :?
  60.     if {[catch {search -s -f 0 -m 0 -r 0 {;} [expr [getPos] - 1]} spos] || [lindex $spos 0] < $bpos} {set spos 0}
  61.     set spos [lindex $spos 0]
  62.     if {[catch {search -s -f 0 -m 0 -r 0 {:} [getPos]} cpos] || [lindex $cpos 0] < $bpos} {set cpos 0}
  63.     set cpos [lindex $cpos 0]
  64.     if {$spos < $cpos} {
  65.         # After colon
  66.         if {[catch {search -s -f 0 -m 0 -r 1 {[;\{ \t\r]} $cpos} w2pos]} {set w2pos 0}
  67.         set pword [getText [lindex $w2pos 1] $cpos]
  68.         if {[lsearch -exact $cssURLs $pword] >= 0 || [string match "url(*" $word]} {
  69.             set matchWords $HTMLmodeVars(URLs)
  70.             incr wpos 4
  71.             set word [string trimleft [string range $word 4 end] \"]
  72.             set isURL 1
  73.         } else {
  74.             set matchWords [eval concat $cssProperty($pword)]
  75.             set isURL 0
  76.         }
  77.         foreach p $matchWords {
  78.             if {[string match $word* $p]} {lappend matches $p}
  79.         }
  80.         if {![llength $matches]} {
  81.             select $wpos [getPos]
  82.         } else {
  83.             set newval [largestPrefix $matches]
  84.             if {$isURL} {set newval [htmlURLescape2 $newval]}
  85.             replaceText $wpos [getPos] [lindex {"" "\""} $isURL]$newval
  86.         }
  87.     } else {
  88.         # Before colon
  89.         foreach p $allCss {
  90.             if {[string match $word* $p]} {lappend matches $p}
  91.         }
  92.         if {![llength $matches]} {
  93.             select $wpos [getPos]
  94.         } else {
  95.             set word [largestPrefix $matches]
  96.             if {[llength $matches] == 1} {
  97.                 append word ": "
  98.                 set backTwo 0
  99.                 if {[lsearch -exact $cssURLs [string trimright $word ": "]] >= 0} {
  100.                     append word "url(\"\")"
  101.                     set backTwo 1
  102.                 }
  103.             }
  104.             replaceText $wpos [getPos] $word
  105.             if {$backTwo} {goto [expr [getPos] - 2]}
  106.         }
  107.     }
  108.     return 1
  109. }
  110.